!function (a, b) {
    "function" == typeof define && (define.amd || define.cmd) ? define(function () {
        return b(a)
    }) : b(a, !0)
}(this, function (a, b) {
    function c(b, c, d) {
        a.WeixinJSBridge ? WeixinJSBridge.invoke(b, e(c), function (a) {
            h(b, a, d)
        }) : k(b, d)
    }

    function d(b, c, d) {
        a.WeixinJSBridge ? WeixinJSBridge.on(b, function (a) {
            d && d.trigger && d.trigger(a), h(b, a, c)
        }) : d ? k(b, d) : k(b, c)
    }

    function e(a) {
        return a = a || {}, a.appId = D.appId, a.verifyAppId = D.appId, a.verifySignType = "sha1", a.verifyTimestamp = D.timestamp + "", a.verifyNonceStr = D.nonceStr, a.verifySignature = D.signature, a
    }

    function f(a) {
        return {
            timeStamp: a.timestamp + "",
            nonceStr: a.nonceStr,
            "package": a["package"],
            paySign: a.paySign,
            signType: a.signType || "SHA1"
        }
    }

    function g(a) {
        return a.postalCode = a.addressPostalCode, delete a.addressPostalCode, a.provinceName = a.proviceFirstStageName, delete a.proviceFirstStageName, a.cityName = a.addressCitySecondStageName, delete a.addressCitySecondStageName, a.countryName = a.addressCountiesThirdStageName, delete a.addressCountiesThirdStageName, a.detailInfo = a.addressDetailInfo, delete a.addressDetailInfo, a
    }

    function h(a, b, c) {
        "openEnterpriseChat" == a && (b.errCode = b.err_code), delete b.err_code, delete b.err_desc, delete b.err_detail;
        var d = b.errMsg;
        d || (d = b.err_msg, delete b.err_msg, d = i(a, d), b.errMsg = d), c = c || {}, c._complete && (c._complete(b), delete c._complete), d = b.errMsg || "", D.debug && !c.isInnerInvoke && alert(JSON.stringify(b));
        var e = d.indexOf(":"), f = d.substring(e + 1);
        switch (f) {
            case"ok":
                c.success && c.success(b);
                break;
            case"cancel":
                c.cancel && c.cancel(b);
                break;
            default:
                c.fail && c.fail(b)
        }
        c.complete && c.complete(b)
    }

    function i(a, b) {
        var c = a, d = q[c];
        d && (c = d);
        var e = "ok";
        if (b) {
            var f = b.indexOf(":");
            e = b.substring(f + 1), "confirm" == e && (e = "ok"), "failed" == e && (e = "fail"), -1 != e.indexOf("failed_") && (e = e.substring(7)), -1 != e.indexOf("fail_") && (e = e.substring(5)), e = e.replace(/_/g, " "), e = e.toLowerCase(), ("access denied" == e || "no permission to execute" == e) && (e = "permission denied"), "config" == c && "function not exist" == e && (e = "ok"), "" == e && (e = "fail")
        }
        return b = c + ":" + e
    }

    function j(a) {
        if (a) {
            for (var b = 0, c = a.length; c > b; ++b) {
                var d = a[b], e = p[d];
                e && (a[b] = e)
            }
            return a
        }
    }

    function k(a, b) {
        if (!(!D.debug || b && b.isInnerInvoke)) {
            var c = q[a];
            c && (a = c), b && b._complete && delete b._complete, console.log('"' + a + '",', b || "")
        }
    }

    function l(a) {
        if (!(v || w || D.debug || "6.0.2" > A || C.systemType < 0)) {
            var b = new Image;
            C.appId = D.appId, C.initTime = B.initEndTime - B.initStartTime, C.preVerifyTime = B.preVerifyEndTime - B.preVerifyStartTime, I.getNetworkType({
                isInnerInvoke: !0,
                success: function (a) {
                    C.networkType = a.networkType;
                    var c = "https://open.weixin.qq.com/sdk/report?v=" + C.version + "&o=" + C.isPreVerifyOk + "&s=" + C.systemType + "&c=" + C.clientVersion + "&a=" + C.appId + "&n=" + C.networkType + "&i=" + C.initTime + "&p=" + C.preVerifyTime + "&u=" + C.url;
                    b.src = c
                }
            })
        }
    }

    function m() {
        return (new Date).getTime()
    }

    function n(b) {
        x && (a.WeixinJSBridge ? b() : r.addEventListener && r.addEventListener("WeixinJSBridgeReady", b, !1))
    }

    function o() {
        I.invoke || (I.invoke = function (b, c, d) {
            a.WeixinJSBridge && WeixinJSBridge.invoke(b, e(c), d)
        }, I.on = function (b, c) {
            a.WeixinJSBridge && WeixinJSBridge.on(b, c)
        })
    }

    if (!a.jWeixin) {
        var p = {
            config: "preVerifyJSAPI",
            onMenuShareTimeline: "menu:share:timeline",
            onMenuShareAppMessage: "menu:share:appmessage",
            onMenuShareQQ: "menu:share:qq",
            onMenuShareWeibo: "menu:share:weiboApp",
            onMenuShareQZone: "menu:share:QZone",
            previewImage: "imagePreview",
            getLocation: "geoLocation",
            openProductSpecificView: "openProductViewWithPid",
            addCard: "batchAddCard",
            openCard: "batchViewCard",
            chooseWXPay: "getBrandWCPayRequest",
            openEnterpriseRedPacket: "getRecevieBizHongBaoRequest",
            startSearchBeacons: "startMonitoringBeacons",
            stopSearchBeacons: "stopMonitoringBeacons",
            onSearchBeacons: "onBeaconsInRange",
            consumeAndShareCard: "consumedShareCard",
            openAddress: "editAddress"
        }, q = function () {
            var a = {};
            for (var b in p)a[p[b]] = b;
            return a
        }(), r = a.document, s = r.title, t = navigator.userAgent.toLowerCase(), u = navigator.platform.toLowerCase(), v = !(!u.match("mac") && !u.match("win")), w = -1 != t.indexOf("wxdebugger"), x = -1 != t.indexOf("micromessenger"), y = -1 != t.indexOf("android"), z = -1 != t.indexOf("iphone") || -1 != t.indexOf("ipad"), A = function () {
            var a = t.match(/micromessenger\/(\d+\.\d+\.\d+)/) || t.match(/micromessenger\/(\d+\.\d+)/);
            return a ? a[1] : ""
        }(), B = {initStartTime: m(), initEndTime: 0, preVerifyStartTime: 0, preVerifyEndTime: 0}, C = {
            version: 1,
            appId: "",
            initTime: 0,
            preVerifyTime: 0,
            networkType: "",
            isPreVerifyOk: 1,
            systemType: z ? 1 : y ? 2 : -1,
            clientVersion: A,
            url: encodeURIComponent(location.href)
        }, D = {}, E = {_completes: []}, F = {state: 0, data: {}};
        n(function () {
            B.initEndTime = m()
        });
        var G = !1, H = [], I = {
            config: function (a) {
                D = a, k("config", a);
                var b = D.check === !1 ? !1 : !0;
                n(function () {
                    if (b)c(p.config, {verifyJsApiList: j(D.jsApiList)}, function () {
                        E._complete = function (a) {
                            B.preVerifyEndTime = m(), F.state = 1, F.data = a
                        }, E.success = function (a) {
                            C.isPreVerifyOk = 0
                        }, E.fail = function (a) {
                            E._fail ? E._fail(a) : F.state = -1
                        };
                        var a = E._completes;
                        return a.push(function () {
                            l()
                        }), E.complete = function (b) {
                            for (var c = 0, d = a.length; d > c; ++c)a[c]();
                            E._completes = []
                        }, E
                    }()), B.preVerifyStartTime = m(); else {
                        F.state = 1;
                        for (var a = E._completes, d = 0, e = a.length; e > d; ++d)a[d]();
                        E._completes = []
                    }
                }), D.beta && o()
            }, ready: function (a) {
                0 != F.state ? a() : (E._completes.push(a), !x && D.debug && a())
            }, error: function (a) {
                "6.0.2" > A || (-1 == F.state ? a(F.data) : E._fail = a)
            }, checkJsApi: function (a) {
                var b = function (a) {
                    var b = a.checkResult;
                    for (var c in b) {
                        var d = q[c];
                        d && (b[d] = b[c], delete b[c])
                    }
                    return a
                };
                c("checkJsApi", {jsApiList: j(a.jsApiList)}, function () {
                    return a._complete = function (a) {
                        if (y) {
                            var c = a.checkResult;
                            c && (a.checkResult = JSON.parse(c))
                        }
                        a = b(a)
                    }, a
                }())
            }, onMenuShareTimeline: function (a) {
                d(p.onMenuShareTimeline, {
                    complete: function () {
                        c("shareTimeline", {
                            title: a.title || s,
                            desc: a.title || s,
                            img_url: a.imgUrl || "",
                            link: a.link || location.href,
                            type: a.type || "link",
                            data_url: a.dataUrl || ""
                        }, a)
                    }
                }, a)
            }, onMenuShareAppMessage: function (a) {
                d(p.onMenuShareAppMessage, {
                    complete: function () {
                        c("sendAppMessage", {
                            title: a.title || s,
                            desc: a.desc || "",
                            link: a.link || location.href,
                            img_url: a.imgUrl || "",
                            type: a.type || "link",
                            data_url: a.dataUrl || ""
                        }, a)
                    }
                }, a)
            }, onMenuShareQQ: function (a) {
                d(p.onMenuShareQQ, {
                    complete: function () {
                        c("shareQQ", {
                            title: a.title || s,
                            desc: a.desc || "",
                            img_url: a.imgUrl || "",
                            link: a.link || location.href
                        }, a)
                    }
                }, a)
            }, onMenuShareWeibo: function (a) {
                d(p.onMenuShareWeibo, {
                    complete: function () {
                        c("shareWeiboApp", {
                            title: a.title || s,
                            desc: a.desc || "",
                            img_url: a.imgUrl || "",
                            link: a.link || location.href
                        }, a)
                    }
                }, a)
            }, onMenuShareQZone: function (a) {
                d(p.onMenuShareQZone, {
                    complete: function () {
                        c("shareQZone", {
                            title: a.title || s,
                            desc: a.desc || "",
                            img_url: a.imgUrl || "",
                            link: a.link || location.href
                        }, a)
                    }
                }, a)
            }, startRecord: function (a) {
                c("startRecord", {}, a)
            }, stopRecord: function (a) {
                c("stopRecord", {}, a)
            }, onVoiceRecordEnd: function (a) {
                d("onVoiceRecordEnd", a)
            }, playVoice: function (a) {
                c("playVoice", {localId: a.localId}, a)
            }, pauseVoice: function (a) {
                c("pauseVoice", {localId: a.localId}, a)
            }, stopVoice: function (a) {
                c("stopVoice", {localId: a.localId}, a)
            }, onVoicePlayEnd: function (a) {
                d("onVoicePlayEnd", a)
            }, uploadVoice: function (a) {
                c("uploadVoice", {localId: a.localId, isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1}, a)
            }, downloadVoice: function (a) {
                c("downloadVoice", {serverId: a.serverId, isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1}, a)
            }, translateVoice: function (a) {
                c("translateVoice", {localId: a.localId, isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1}, a)
            }, chooseImage: function (a) {
                c("chooseImage", {
                    scene: "1|2",
                    count: a.count || 9,
                    sizeType: a.sizeType || ["original", "compressed"],
                    sourceType: a.sourceType || ["album", "camera"]
                }, function () {
                    return a._complete = function (a) {
                        if (y) {
                            var b = a.localIds;
                            b && (a.localIds = JSON.parse(b))
                        }
                    }, a
                }())
            }, getLocation: function (a) {
            }, previewImage: function (a) {
                c(p.previewImage, {current: a.current, urls: a.urls}, a)
            }, uploadImage: function (a) {
                c("uploadImage", {localId: a.localId, isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1}, a)
            }, downloadImage: function (a) {
                c("downloadImage", {serverId: a.serverId, isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1}, a)
            }, getLocalImgData: function (a) {
                G === !1 ? (G = !0, c("getLocalImgData", {localId: a.localId}, function () {
                    return a._complete = function (a) {
                        if (G = !1, H.length > 0) {
                            var b = H.shift();
                            wx.getLocalImgData(b)
                        }
                    }, a
                }())) : H.push(a)
            }, getNetworkType: function (a) {
                var b = function (a) {
                    var b = a.errMsg;
                    a.errMsg = "getNetworkType:ok";
                    var c = a.subtype;
                    if (delete a.subtype, c)a.networkType = c; else {
                        var d = b.indexOf(":"), e = b.substring(d + 1);
                        switch (e) {
                            case"wifi":
                            case"edge":
                            case"wwan":
                                a.networkType = e;
                                break;
                            default:
                                a.errMsg = "getNetworkType:fail"
                        }
                    }
                    return a
                };
                c("getNetworkType", {}, function () {
                    return a._complete = function (a) {
                        a = b(a)
                    }, a
                }())
            }, openLocation: function (a) {
                c("openLocation", {
                    latitude: a.latitude,
                    longitude: a.longitude,
                    name: a.name || "",
                    address: a.address || "",
                    scale: a.scale || 28,
                    infoUrl: a.infoUrl || ""
                }, a)
            }, getLocation: function (a) {
                a = a || {}, c(p.getLocation, {type: a.type || "wgs84"}, function () {
                    return a._complete = function (a) {
                        delete a.type
                    }, a
                }())
            }, hideOptionMenu: function (a) {
                c("hideOptionMenu", {}, a)
            }, showOptionMenu: function (a) {
                c("showOptionMenu", {}, a)
            }, closeWindow: function (a) {
                a = a || {}, c("closeWindow", {}, a)
            }, hideMenuItems: function (a) {
                c("hideMenuItems", {menuList: a.menuList}, a)
            }, showMenuItems: function (a) {
                c("showMenuItems", {menuList: a.menuList}, a)
            }, hideAllNonBaseMenuItem: function (a) {
                c("hideAllNonBaseMenuItem", {}, a)
            }, showAllNonBaseMenuItem: function (a) {
                c("showAllNonBaseMenuItem", {}, a)
            }, scanQRCode: function (a) {
                a = a || {}, c("scanQRCode", {
                    needResult: a.needResult || 0,
                    scanType: a.scanType || ["qrCode", "barCode"]
                }, function () {
                    return a._complete = function (a) {
                        if (z) {
                            var b = a.resultStr;
                            if (b) {
                                var c = JSON.parse(b);
                                a.resultStr = c && c.scan_code && c.scan_code.scan_result
                            }
                        }
                    }, a
                }())
            }, openAddress: function (a) {
                c(p.openAddress, {}, function () {
                    return a._complete = function (a) {
                        a = g(a)
                    }, a
                }())
            }, openProductSpecificView: function (a) {
                c(p.openProductSpecificView, {pid: a.productId, view_type: a.viewType || 0, ext_info: a.extInfo}, a)
            }, addCard: function (a) {
                for (var b = a.cardList, d = [], e = 0, f = b.length; f > e; ++e) {
                    var g = b[e], h = {card_id: g.cardId, card_ext: g.cardExt};
                    d.push(h)
                }
                c(p.addCard, {card_list: d}, function () {
                    return a._complete = function (a) {
                        var b = a.card_list;
                        if (b) {
                            b = JSON.parse(b);
                            for (var c = 0, d = b.length; d > c; ++c) {
                                var e = b[c];
                                e.cardId = e.card_id, e.cardExt = e.card_ext, e.isSuccess = e.is_succ ? !0 : !1, delete e.card_id, delete e.card_ext, delete e.is_succ
                            }
                            a.cardList = b, delete a.card_list
                        }
                    }, a
                }())
            }, chooseCard: function (a) {
                c("chooseCard", {
                    app_id: D.appId,
                    location_id: a.shopId || "",
                    sign_type: a.signType || "SHA1",
                    card_id: a.cardId || "",
                    card_type: a.cardType || "",
                    card_sign: a.cardSign,
                    time_stamp: a.timestamp + "",
                    nonce_str: a.nonceStr
                }, function () {
                    return a._complete = function (a) {
                        a.cardList = a.choose_card_info, delete a.choose_card_info
                    }, a
                }())
            }, openCard: function (a) {
                for (var b = a.cardList, d = [], e = 0, f = b.length; f > e; ++e) {
                    var g = b[e], h = {card_id: g.cardId, code: g.code};
                    d.push(h)
                }
                c(p.openCard, {card_list: d}, a)
            }, consumeAndShareCard: function (a) {
                c(p.consumeAndShareCard, {consumedCardId: a.cardId, consumedCode: a.code}, a)
            }, chooseWXPay: function (a) {
                c(p.chooseWXPay, f(a), a)
            }, openEnterpriseRedPacket: function (a) {
                c(p.openEnterpriseRedPacket, f(a), a)
            }, startSearchBeacons: function (a) {
                c(p.startSearchBeacons, {ticket: a.ticket}, a)
            }, stopSearchBeacons: function (a) {
                c(p.stopSearchBeacons, {}, a)
            }, onSearchBeacons: function (a) {
                d(p.onSearchBeacons, a)
            }, openEnterpriseChat: function (a) {
                c("openEnterpriseChat", {useridlist: a.userIds, chatname: a.groupName}, a)
            }
        }, J = 1, K = {};
        return r.addEventListener("error", function (a) {
            if (!y) {
                var b = a.target, c = b.tagName, d = b.src;
                if ("IMG" == c || "VIDEO" == c || "AUDIO" == c || "SOURCE" == c) {
                    var e = -1 != d.indexOf("wxlocalresource://");
                    if (e) {
                        a.preventDefault(), a.stopPropagation();
                        var f = b["wx-id"];
                        if (f || (f = J++, b["wx-id"] = f), K[f])return;
                        K[f] = !0, wx.ready(function () {
                            wx.getLocalImgData({
                                localId: d, success: function (a) {
                                    b.src = a.localData
                                }
                            })
                        })
                    }
                }
            }
        }, !0), r.addEventListener("load", function (a) {
            if (!y) {
                var b = a.target, c = b.tagName;
                b.src;
                if ("IMG" == c || "VIDEO" == c || "AUDIO" == c || "SOURCE" == c) {
                    var d = b["wx-id"];
                    d && (K[d] = !1)
                }
            }
        }, !0), b && (a.wx = a.jWeixin = I), I
    }
});